import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Calendar;
import javax.swing.DefaultListModel;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.ListModel;
import javax.swing.WindowConstants;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.JList;
import quick.dbtable.DBTable;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.SwingConstants;
import javax.swing.ListSelectionModel;


public class VentanaInspector extends JInternalFrame {
	//ATRIBUTOS DE INSTANCIA
	protected String numLegajo;
	
	protected JTextField textFieldNuevaPatente;
	
	protected JPanel panelInspector;
	
	protected JLabel lblNuevaPatente;
	protected JLabel lblUbicaciones;
	protected JLabel lblParquimetros;
	protected JLabel lblPatentes;
	
	protected JButton btnAgregarPatente;
	protected JButton btnBorrar;
	protected JButton btnConectar;
	protected JButton btnLimpiar;
	
	protected JScrollPane scrollPaneUbicaciones;
	protected JScrollPane scrollPaneParquimetros;
	protected JScrollPane scrollPanePatentes;
	
	protected JList<String> listUbicaciones;	
	protected JList<String> listParquimetros;	
	protected JList<String> listPatentes;
	
	protected java.sql.Connection cnx;
	
	protected DBTable tablaMultas;	
	
	/**
	 * Create the frame.
	 */
	public VentanaInspector() {
		super();
		initGUI();
	}
	//INICIALIZA ASPECTOS DE LA GUI
	private void initGUI(){
		getContentPane().setLayout(null);
		setPreferredSize(new Dimension(800, 530));
        setBounds(0, 0, 800, 530);         
        setVisible(true);
        setTitle("Inspector");
        getContentPane().setLayout(null);
        this.setClosable(false);
        this.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
        this.setMaximizable(false);
        this.setResizable(false);
        this.addComponentListener(new ComponentAdapter() {
            public void componentHidden(ComponentEvent evt) {
               thisComponentHidden(evt);
            }
            public void componentShown(ComponentEvent evt) {
               thisComponentShown(evt);
            }
         });          
        
        //PANEL DONDE SE UBICAN LOS COMPONENTES
        panelInspector = new JPanel();  
        panelInspector.setBounds(0, 0, 784, 500);
        getContentPane().add(panelInspector);
        panelInspector.setLayout(null);
        
        lblNuevaPatente = new JLabel("Ingrese una patente:"); 
        lblNuevaPatente.setHorizontalAlignment(SwingConstants.RIGHT);
        lblNuevaPatente.setBounds(0, 29, 121, 30);
        panelInspector.add(lblNuevaPatente);        
        
        //TEXTFIELD DONDE EL INSPECTOR AGREGA LAS PATENTES
        textFieldNuevaPatente = new JTextField();    
        textFieldNuevaPatente.setBounds(14, 63, 107, 20);
        panelInspector.add(textFieldNuevaPatente);
        
        //JLIST PARA LAS PATENTES INGRESADAS POR EL INSPECTOR        
        listPatentes = new JList();        
        listPatentes.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        
        scrollPanePatentes = new JScrollPane();
        scrollPanePatentes.setBounds(135, 29, 183, 193);
        panelInspector.add(scrollPanePatentes);
        scrollPanePatentes.setViewportView(listPatentes);
        
        //BOTON PARA AGREGAR UNA PATENTE
        btnAgregarPatente = new JButton("Agregar");
        btnAgregarPatente.addMouseListener(new MouseAdapter() {
        	@Override
        	public void mouseClicked(MouseEvent arg0) {
        		String patente=textFieldNuevaPatente.getText().toUpperCase();//SE OBTIENE LA PATENTE
        		if(patenteValida(patente)){//ES UNA PATENTE VALIDA SI SON 3 LETRAS SEGUIDAS DE 3 NUMEROS
        				if(patenteEnBD(patente)){//LA PATENTE ESTA REGISTRADA EN LA B.D.
        					ListModel previo=listPatentes.getModel();//SE OBTIENEN LAS PATENTES YA INGRESADAS
        	        		if(!patenteIngresada(previo,patente)){
        	        			DefaultListModel nuevo = new DefaultListModel();
        	        			for(int i =0;i<previo.getSize();i++){
        	        				nuevo.addElement(previo.getElementAt(i));}
        	        			nuevo.addElement(patente);//SE AGREGA LA PATENTE A LA LISTA
        	        			listPatentes.setModel(nuevo);
        	        			if(nuevo.size()==1){
        	        				btnConectar.setEnabled(true);}//SI AGREGO UNA PATENTE YA PUEDE CONECTARSE  A UN PARQUIMETRO
        	        			textFieldNuevaPatente.setText("");
        	        			listPatentes.setSelectedIndex(0);}
        	        		else {patenteInvalida("La patente "+patente+" ya fue ingresada.\n");}} //MENSAJE DE ERROR       				
        				else {patenteInvalida("La patente "+patente+" no esta registrada en la base de datos.\n");}}//MENSAJE DE ERROR
        		else {patenteInvalida("La patente "+patente+" es invalida.\n");}//MENSAJE DE ERROR        		
        	}
        });
        btnAgregarPatente.setBounds(32, 94, 89, 23);
        panelInspector.add(btnAgregarPatente);
        
        scrollPaneUbicaciones = new JScrollPane();
        scrollPaneUbicaciones.setBounds(358, 29, 183, 193);
        panelInspector.add(scrollPaneUbicaciones);
        
        //JLIST DONDE SE MUESTRAN LOS PARQUIMETROS DE UNA UBICACION
        listParquimetros = new JList();
        listParquimetros.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        scrollPaneParquimetros = new JScrollPane();
        scrollPaneParquimetros.setBounds(577, 29, 183, 193);
        panelInspector.add(scrollPaneParquimetros);
        scrollPaneParquimetros.setViewportView(listParquimetros);
         
        conectarBD_Inspector();//CONEXION A LA B.D.
        
        //JLIST DONDE SE MUESTRAN LAS UBICACIONES QUE HAY
        listUbicaciones = new JList();
        listUbicaciones.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        listUbicaciones.addListSelectionListener(new ListSelectionListener() {
        	public void valueChanged(ListSelectionEvent arg0) {//CUANDO SE SELECCIONA UNA UBICACION SE DEBEN MOSTRAR LOS PARQUIMETROS QUE HAY EN ELLA
        		String ubiCalle=listUbicaciones.getSelectedValue();//UBICACION SELECCIONADA
        		int i=0;String calle="";String altura="";//SE OBTIENE LA CALLE Y LA ALTURA
        		while((i<ubiCalle.length())&&(ubiCalle.charAt(i)!=' ')){
        			calle+=ubiCalle.charAt(i);i++;}
        		i++;
        		while(i<ubiCalle.length()){
        			altura+=ubiCalle.charAt(i);i++;}
        		try {
        			// SE CREA UNA SENTENCIA PARA LA CONSULTA
        			java.sql.Statement stmt = cnx.createStatement();
        			// STRING DE LA CONSULTA SQL
        			String sql = "select numero from parquimetros where calle like '"+calle+"' and altura="+altura;
        			// SE EJECUTA LA CONSULTA Y SE OBTIENE UN RESULTADO
        			java.sql.ResultSet rs;
        			rs = stmt.executeQuery(sql);
        			DefaultListModel modelParquimetros = new DefaultListModel();
        			while(rs.next()){
        				modelParquimetros.addElement(rs.getString(1));}//SE AGREGAN LOS PARQUIMETROS A LA JLIST
        			listParquimetros.setModel(modelParquimetros);
        			listParquimetros.setSelectedIndex(0);
        		} catch (Exception e) {
        			// TODO Auto-generated catch block
        			e.printStackTrace();}
        	}
        });
        scrollPaneUbicaciones.setViewportView(listUbicaciones);
        
        //CARGA LAS UBICACIONES EN LA JLIST
        try {
			// SE CREA LA SENTENCIA PARA LA CONSULTA
			java.sql.Statement stmt = cnx.createStatement();
			// STRING DE LA CONSULTA SQL
			String sql = "select calle,altura from ubicaciones";
			// SE EJECUTA LA SENTENCIA Y SE OBTIENEN LAS UBICACIONES
			java.sql.ResultSet rs;
			rs = stmt.executeQuery(sql);
			DefaultListModel modelUbicaciones = new DefaultListModel();
			while(rs.next()){
				modelUbicaciones.addElement(rs.getString(1)+" "+rs.getString(2));}//AGREGA LAS UBICACIONES A LA JLIST
			listUbicaciones.setModel(modelUbicaciones);
			listUbicaciones.setSelectedIndex(0);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();}
             
        //BORRA UNA PATENTE INGRESADA
        btnBorrar = new JButton("Borrar");
        btnBorrar.addMouseListener(new MouseAdapter() {
        	@Override
        	public void mouseClicked(MouseEvent e) {
        		if(!listPatentes.isSelectionEmpty()){//SI HAY AL MENOS UNA PATENTE INGRESADA
        			String pat=listPatentes.getSelectedValue();
        			ListModel previo=listPatentes.getModel();//PATENTES INGRESADAS	        		
            		DefaultListModel nuevo = new DefaultListModel();
            		for(int i =0;i<previo.getSize();i++){
            			if(!pat.equals(previo.getElementAt(i))){
            				nuevo.addElement(previo.getElementAt(i));}}//LA PATENTE ELEGIDA ES BORRADA
            		listPatentes.setModel(nuevo);
            		if(nuevo.size()==0){//SI NO QUEDAN PATENTES INGRESADAS ENTONCES NO SE PUEDE CONECTAR AL PARQUIMETRO
            			btnConectar.setEnabled(false);}
            		listPatentes.setSelectedIndex(0);}
        	}
        });
        btnBorrar.setBounds(32, 128, 89, 23);
        panelInspector.add(btnBorrar);
        
        //BOTON PARA CONECTARSE AL PARQUIMETRO DE LA UBICACION
        btnConectar = new JButton("Conectar");
        btnConectar.addMouseListener(new MouseAdapter() {
        	@Override
        	public void mouseClicked(MouseEvent arg0) {
        		if(btnConectar.isEnabled()){//SI AGREGO AL MENOS UNA PATENTE ESTARA HABILITADO
        			if(btnConectar.getText().equals("Conectar")){//CONEXION AL PARQUIMETRO
        				conectarUnidad();}
        			else{//SE DESCONECTA DEL PARQUIMETRO;
        				limpiarPatentes();
        				listUbicaciones.setSelectedIndex(0);
        				btnConectar.setText("Conectar");
        				btnConectar.setEnabled(false);
        				tablaMultas.setVisible(false);}}
        	}
        });
        btnConectar.setBounds(638, 233, 121, 37);
        btnConectar.setEnabled(false);
        panelInspector.add(btnConectar);
        
        lblUbicaciones = new JLabel("Ubicaciones");
        lblUbicaciones.setHorizontalAlignment(SwingConstants.CENTER);
        lblUbicaciones.setBounds(358, 5, 183, 23);
        panelInspector.add(lblUbicaciones);
        
        lblParquimetros = new JLabel("Parquimetros en la Ubicacion");
        lblParquimetros.setHorizontalAlignment(SwingConstants.CENTER);
        lblParquimetros.setBounds(577, 5, 183, 23);
        panelInspector.add(lblParquimetros);
        
        lblPatentes = new JLabel("Patentes");
        lblPatentes.setHorizontalAlignment(SwingConstants.CENTER);
        lblPatentes.setBounds(135, 5, 183, 23);
        panelInspector.add(lblPatentes);
        
        //DBTABLE DONDE SE MOSTRARAN LAS MULTAS LABRADAS
        tablaMultas = new DBTable();  
    	tablaMultas.setLocation(32, 284);
    	tablaMultas.setSize(722, 180);
    	panelInspector.add(tablaMultas);           
    	tablaMultas.setEditable(false);
    	tablaMultas.setVisible(false);
    	
    	//ELIMINA LAS PATENTES INGRESADAS
    	btnLimpiar = new JButton("Limpiar");
    	btnLimpiar.addMouseListener(new MouseAdapter() {
    		@Override
    		public void mouseClicked(MouseEvent arg0) {
    			limpiarPatentes();
    		}
    	});
    	btnLimpiar.setBounds(32, 162, 89, 23);
    	panelInspector.add(btnLimpiar);        
	}
		
	//SE INICIA LA CONEXION A LA B.D.
	private void thisComponentShown(ComponentEvent evt){
		conectarBD_Inspector();
	}
	//SE DESCONECTA DE LA B.D.   
	private void thisComponentHidden(ComponentEvent evt){
		 	try {
				cnx.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();}
	  }
	 //CONEXION A LA B.D. DE MANERA NORMAL
	 private void conectarBD_Inspector(){
		 try {
        	String servidor = "localhost:3306";
            String baseDatos = "parquimetros";
            String usuario = "inspector";
            String clave = "inspector";
            String uriConexion = "jdbc:mysql://" + servidor + "/" + baseDatos;
   
            //SE ESTABLECE LA CONEXION A LA B.D. "PARQUIMETROS"    
            cnx=java.sql.DriverManager.getConnection(uriConexion,usuario,clave);}
         catch (Exception ex){
             JOptionPane.showMessageDialog(this,
                                           "Se produjo un error al intentar conectarse a la base de datos.\n" + ex.getMessage(),
                                           "Error",
                                           JOptionPane.ERROR_MESSAGE);
            System.out.println("Exception: " + ex.getMessage());}
	 }
	 //SE CIERRA LA CONEXION
	 private void desconectarBD_Inspector(){
		 try{
			 cnx.close();}
         catch (Exception ex){
            System.out.println("Exception: " + ex.getMessage());}		 
	 }
	 //DETERMINA SI UN CARACTER ES UNA LETRA
	 private boolean esLetra(char c){
		 if((c>=65)&&(c<=90)||((c>=97)&&(c<=122))){
			 return true;}
		 return false;
	 }
	 //DETERMINA SI UN CARACTER ES UN NUMERO
	 private boolean esNumero(char c){
		 if((c>=48)&&(c<=57)){
			 return true;}
		 return false;
	 }
	 //DEVUELVE VERDADERO SI ES UNA PATENTE VALIDA, 3 LETRAS SEGUIDAS DE 3 NUMEROS
	 private boolean patenteValida(String p){
		 if(p.length()!=6){
			 return false;}
		if((esLetra(p.charAt(0)))&&(esLetra(p.charAt(1)))&&(esLetra(p.charAt(2)))&&(esNumero(p.charAt(3)))&&(esNumero(p.charAt(4)))&&(esNumero(p.charAt(5)))){
			return true;}
		 return false;
	 }
	 //MENSAJE EN CASO DE QUE LA PATENTE SEA INVALIDA
	 private void patenteInvalida(String msj){
		 JOptionPane.showMessageDialog(this,
	                 msj,
	                 "Error al ingresar patente",
	                 JOptionPane.ERROR_MESSAGE);
	 }
	 //PARA SABER CUAL ES EL LEGAJO DEL INSPECTOR LOGUEADO
	 protected void setNumLegajo(String s){
		 numLegajo=s;
		 setTitle("Inspector Nro Legajo: "+numLegajo);
	 }
	 //CONEXION AL PARQUIMETRO
	 private void conectarUnidad(){
		 String ubiCalle=listUbicaciones.getSelectedValue();
		 //SE OBTIENEN LA CALLE Y ALTURA DE LA UBICACION SELECCIONADA
		 String calle="";String alt="";
		 int i=0;
		 while((i<ubiCalle.length())&&(ubiCalle.charAt(i)!=' ')){
			 calle+=ubiCalle.charAt(i);i++;}
		 i++;
		 while(i<ubiCalle.length()){
			 alt+=ubiCalle.charAt(i);i++;}
		 //NUMERO DE PARQUIMETRO SELECCIONADO
		 String numParq=listParquimetros.getSelectedValue();
		
		try {
			// SE CREA UNA SENTENCIA PARA LA CONSULTA
			java.sql.Statement stmt = cnx.createStatement();
			// STRING PARA LA CONSULTA SQL
			String sql = "select dia,turno,id_asociado_con from asociado_con where legajo="+numLegajo+" and calle like '"+calle+"' and altura="+alt;
			// SE EJECUTA Y SE OBTIENE UN RESULTADO
			java.sql.ResultSet rs;
			rs = stmt.executeQuery(sql);
			if(rs.next()){//EL INSPECTOR TIENE ASOCIADA LA UBICACION SELECCIONADA
				String id_asociado=rs.getString(3);//ID_ASOCIADO_CON
				String dia=rs.getString(1);String turno=rs.getString(2);//SE OBTIENE EL DIA Y HORA ASOCIADA PARA EL INSPECTOR EN LA UBICACION
				Calendar c = Calendar.getInstance();
				int d=c.get(Calendar.DAY_OF_WEEK);//SE OBTIENE EL DIA DE LA SEMANA
				//String diaAcceso=convertirNumADia(4);//DIA ASOCIADO AL INSPECTOR
				String diaAcceso="Vi";
				int h=c.get(Calendar.HOUR_OF_DAY);//HORA DE LA HORA DE ACCESO
				int m=c.get(Calendar.MINUTE);//MINUTOS DE LA HORA DE ACCESO
				int s=c.get(Calendar.SECOND);//SEGUNDOS DE LA HORA DE ACCESO
				//String turnoAcceso=obtenerTurno(h);//TURNO ASOCIADO AL INSPECTOR
				String turnoAcceso="M";
				if((diaAcceso.equals(dia))&&(turnoAcceso.equals(turno))){//ESTA EN EL DIA Y TURNO ASIGNADO AL INSPECTOR EN LA UBICACION
					btnConectar.setText("Desconectar");//LUEGO PODRA DESCONECTARSE
					//SE OBTIENE EL ID_PARQ DEL PARQUIMETRO SELECCIONADO
					// SE CREA UNA SENTENCIA PARA LA CONSULTA
					stmt = cnx.createStatement();
					// STRING PARA LA CONSULTA SQL
					sql = "select id_parq from parquimetros where calle like '"+calle+"' and altura="+alt+" and numero="+numParq;
					// SE EJECUTA LA SENTENCIA Y SE OBTIENE UN RESULTADO
					rs = stmt.executeQuery(sql);
					rs.next();
					String id_parq=rs.getString(1);//ID DEL PARQUIMETRO
					
					//SE REGISTRA EL ACCESO	DEL INSPECTOR EN LA B.D.				
					String fechaInfraccion=Fechas.obtenerFechaActualString();//FECHA DEL ACCESO
					fechaInfraccion=Fechas.convertirStringADateSQL(fechaInfraccion).toString();
					String horaInfraccion=Fechas.obtenerHoraSql(h,m,s);//HORA DEL ACCESO
					// SE CREA UNA SENTENCIA PARA LA CONSULTA
					stmt = cnx.createStatement();
					// STRING PARA LA CONSULTA SQL
					sql = "insert into accede values("+numLegajo+","+id_parq+",'"+fechaInfraccion+"','"+horaInfraccion+"')";
					// SE EJECUTA LA SENTENCIA Y SE REGISTRA EL ACCESO EN LA B.D.
					stmt.execute(sql);					
										
					//PATENTES INGRESADAS POR EL INSPECTOR
					ListModel<String> patentesEstacionadas=listPatentes.getModel();						
					
					//PATENTES REGISTRADAS EN LA UBICACION SELECCIONADA
					ArrayList<String> patentesRegistradas=new ArrayList<String>();
					
					// SE CREA UNA SENTENCIA PARA LA CONSULTA
					stmt = cnx.createStatement();
					// PATENTE DE LOS AUTOS CON ESTACIONAMIENTO ABIERTO EN LA UBICACION
					sql = "select patente from estacionados where calle like '"+calle+"' and altura="+alt;
					// SE OBTIENEN LAS PATENTES
					rs = stmt.executeQuery(sql);
					//SE OBTIENE CADA UNA DE LAS PATENTES
					while(rs.next()){
						patentesRegistradas.add(rs.getString(1));}
					
					ArrayList<String> patentesMulta=new ArrayList<String>();
					//SE OBTIENEN LAS PATENTES EN INFRACCION
					for(i=0;i<patentesEstacionadas.getSize();i++){
						if(!patentesRegistradas.contains(patentesEstacionadas.getElementAt(i))){//NO ESTA REGISTRADA EN LA UBICACION, SE DEBE LABURAR UNA MULTA
							patentesMulta.add(patentesEstacionadas.getElementAt(i));}}
					
					if(patentesMulta.size()>0){	//SE LABRO AL MENOS UNA MULTA				
						//SE AGREGAN LAS MULTAS A LA TABLA MULTA
						for(int j=0;j<patentesMulta.size();j++){
							//SENTENCIA PARA LA CONSULTA
							stmt = cnx.createStatement();
							// SE INSERTA LA MULTA EN LA TABLA
							sql = "insert into multa(fecha,hora,patente,id_asociado_con) values('"+fechaInfraccion+"','"+horaInfraccion+"','"+patentesMulta.get(j)+"',"+id_asociado+")";
							// SE EJECUTA LA SENTENCIA Y SE REGISTRA LA MULTA
							stmt.execute(sql);}
						desconectarBD_Inspector(); //SE CIERRA LA CONEXION PARA QUE LUEGO SE INICIE A TRAVES DE DB TABLE
						mostrarMultas(fechaInfraccion,horaInfraccion,id_asociado);//SE MUESTRAN LAS MULTAS EN LA DBTABLE
						conectarBD_Inspector();}//SE REGRESA A LA CONEXION NORMAL, NO POR DB TABLE
					else{
						noInfracciones();}}	//SE INDICA QUE NO HAY VEHICULOS EN INFRACCIONES				
				else {errorAlConectar();}}//NO SE PUDO CONECTAR 
			else { 
				   errorAlConectar();}//NO SE PUDO CONECTAR
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();}
	 }
	 //SE MUESTRA UN MENSAJE INDICANDO QUE NO SE LABRARON MULTAS
	 private void noInfracciones(){
		 JOptionPane.showMessageDialog(this,
                 "Ningun vehiculo se encuentra en infraccion.\n",
                 "No se generaron multas",
                 JOptionPane.INFORMATION_MESSAGE);
	 }
	 //DETERMINA EL DIA DE LA SEMANA CORRESPONDIENTE A UN INT
	 private String convertirNumADia(int d){
		 if(d==1){
			 return "Do";}
		 else if(d==2){
			 	return "Lu";}
		 	  else if(d==3){
		 		  	  return "Ma";}
		 	  	   else if(d==4){
		 	  		   		return "Mi";}
		 	  	   		else if(d==5){
		 	  	   				return "Ju";}
		 	  	   			 else if(d==6){
		 	  	   				 	return "Vi";}
		 	  	   			 	  else return "Sa";
	 }
	 //DETERMINA EL TURNO SEGUN LA HORA
	 private String obtenerTurno(int h){
		 if((h>=8)&&(h<=13)){
			 return "M";}
		 else if((h>=14)&&(h<=19)){
			 	return "T";}
		 	  else return "I";//invalido, fuera de horario
	 }
	 //MENSAJE DE ERROR EN CASO DE NO PODER REALIZAR LA CONEXION
	 private void errorAlConectar(){
		 JOptionPane.showMessageDialog(this,
                 "No esta autorizado para labrar multas en esta ubicacion.\n",
                 "Acceso denegado",
                 JOptionPane.ERROR_MESSAGE);
	 }
	 //SE MUESTRAN LAS MULTAS EN LA DBTABLE
	 private void mostrarMultas(String fecha,String hora,String id_asoc){
		 try {
			 	tablaMultas.setVisible(true);//SE MUESTRA LA TABLA
				String driver ="com.mysql.jdbc.Driver";
	        	String servidor = "localhost:3306";
	            String baseDatos = "parquimetros";
	            String usuario = "admin";
	            String clave = "admin";
	            String uriConexion = "jdbc:mysql://" + servidor + "/" + baseDatos;
	   
	            //SE CONECTA A LA B.D. "PARQUIMETROS" A TRAVES DE UNA DBTABLE 
	            tablaMultas.connectDatabase(driver, uriConexion, usuario, clave);
	            
	            //STRING PARA LA CONSULTA
	            String sql="select numero,fecha,hora,calle,altura,patente,legajo from multa natural join asociado_con where fecha like '"+fecha+"' and hora like '"+hora+"' and id_asociado_con="+id_asoc;
	            // SE SETEA LA CONSULTA A PARTIR DE LA CUAL SE OBTENDRAN LOS RESULTADOS
	      	  	tablaMultas.setSelectSql(sql);

	      	  // obtenemos el modelo de la tabla a partir de la consulta para 
	      	  // modificar la forma en que se muestran de algunas columnas  
	      	  tablaMultas.createColumnModelFromQuery();    	    
	      	  for (int i = 0; i < tablaMultas.getColumnCount(); i++)
	      	  { // para que muestre correctamente los valores de tipo TIME (hora)  		   		  
	      		 if	 (tablaMultas.getColumn(i).getType()==Types.TIME)  
	      		 {    		 
	      		  tablaMultas.getColumn(i).setType(Types.CHAR);  
	    	       	 }
	      		 // cambiar el formato en que se muestran los valores de tipo DATE
	      		 if	 (tablaMultas.getColumn(i).getType()==Types.DATE)
	      		 {
	      		    tablaMultas.getColumn(i).setDateFormat("dd/MM/YYYY");
	      		 }
	            }  
	      	  //SE ACTUALIAZ EL CONTENIDO DE LA TABLA Y SE CIERRA LA CONEXION 	     	  
	      	  tablaMultas.refresh();
	      	  tablaMultas.close();	       
	         }catch (Exception ex){
	             JOptionPane.showMessageDialog(this,
	                                           "Se produjo un error al intentar conectarse a la base de datos.\n" + ex.getMessage(),
	                                           "Error",
	                                           JOptionPane.ERROR_MESSAGE);
	            System.out.println("Exception: " + ex.getMessage());}		 
	 }
	 //DETERMINA SI LA PATENTE INDICADA ESTA EN LA B.D.
	 private boolean patenteEnBD(String p){
		 	Statement stmt;
			try {
				//SENTENCIA PARA LA CONSULTA
				stmt = cnx.createStatement();
				// STRING PARA LA CONSULTA
				String sql = "select patente from automoviles where patente like '"+p+"'";
				// SE EJECUTA LA SENTENCIA, DEVUELVE VERDADERO EN CASO DE QUE LA PATENTE ESTE REGISTRADA
				return(stmt.executeQuery(sql).next());
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();}
			return true;		 
	 }
	 //DETERMINA SI LA PATENTE YA FUE INGRESADA EN LA JLIST
	 private boolean patenteIngresada(ListModel<String> m,String p){
		 boolean res=false;
		 int i=0;
		 while((i<m.getSize())&&(!res)){
			 if(m.getElementAt(i).equals(p)){
				 res=true;}
			 else i++;}
		 
		 return res;
	 }
	 //ELIMINA LAS PATENES INGRESADAS POR EL INSPECTOR EN LA JLIST
	 private void limpiarPatentes(){
		 ListModel<String> mod=listPatentes.getModel();
			if(mod.getSize()>0){
				listPatentes.setModel(new DefaultListModel());
				btnConectar.setEnabled(false);}
		 
	 }
}
